package com.dys.testqueue16;

import java.util.concurrent.DelayQueue;

/**
 * @className: com.dys.testqueue16.DelayQueueTest
 * @description: com.dys.testqueue16
 * @author: pine cone
 * @version: v1.0.0
 * @createTime: 2024/08/12 下午11:34
 */
public class DelayQueueTest {

    // 创建一个队列
    DelayQueue<User> dq = new DelayQueue<>();

    // 登录游戏
    public void login(User user) {
        dq.add(user);
        System.out.println("用户：[" + user.getUserId() + "],[" + user.getName() + "]已经登录，预计下机时间为：" + user.getEndTime());
    }

    // 时间到，退出游戏，队列中移除
    public void logout() {
        // 打印队列中剩余的人
        System.out.println(dq);
        System.out.println("=============================================");
        try {
            User user = dq.take();
            System.out.println("用户：[" + user.getUserId() + "],[" + user.getName() + "]上机时间到，自动退出游戏。");
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
    }

    // 获取在线人数
    public int onlineSize() {
        return dq.size();
    }

    /**
     * 这是一个main()方法,是应用程序的入口
     *
     * @param args 方法的形参列表,是一个字符串数组,包含了从命令行传递给程序的参数
     */
    public static void main(String[] args) {
        DelayQueueTest test = new DelayQueueTest();
        // 添加登录用户
        test.login(new User(1001, "张淑娜", System.currentTimeMillis() + 5000));
        test.login(new User(1002, "李四", System.currentTimeMillis() + 7000));
        test.login(new User(1003, "王二虎", System.currentTimeMillis() + 12000));
        test.login(new User(1004, "网三胡", System.currentTimeMillis() + 9000));

        // 监控
        while (true) {
            // 到期自动下限
            test.logout();
            // 队列中元素被移除，停止监控，停止循环
            if (test.onlineSize() == 0) {
                break;
            }
        }
    }
}
